+2007-06-03 Richard Hult <richard@imendio.com>
+
+ * gdk/quartz/gdkevents-quartz.c: Make pointer grab emulation work a bit
+ better:
+ (gdk_display_pointer_is_grabbed): Do what the docs say and don't
+ consider implicit grabs here.
+ (gdk_pointer_grab): Overriding a grab by the same app should always be
+ succesful.
+ (gdk_event_translate): Implicit grabs should not be owner events.
+
2007-06-03 Matthias Clasen <mclasen@redhat.com>
* NEWS: Updates
gboolean
gdk_display_pointer_is_grabbed (GdkDisplay *display)
{
- return _gdk_quartz_pointer_grab_window != NULL;
+ return (_gdk_quartz_pointer_grab_window != NULL &&
+ !pointer_grab_implicit);
}
gboolean
if (_gdk_quartz_pointer_grab_window)
{
- if (_gdk_quartz_pointer_grab_window == window && !pointer_grab_implicit)
- return GDK_GRAB_ALREADY_GRABBED;
- else
- {
- if (_gdk_quartz_pointer_grab_window != window)
- generate_grab_broken_event (_gdk_quartz_pointer_grab_window,
- FALSE, pointer_grab_implicit, window);
- pointer_ungrab_internal (TRUE);
- }
+ if (_gdk_quartz_pointer_grab_window != window)
+ generate_grab_broken_event (_gdk_quartz_pointer_grab_window,
+ FALSE, pointer_grab_implicit, window);
+
+ pointer_ungrab_internal (FALSE);
}
return pointer_grab_internal (window, owner_events, event_mask,
GdkEventMask event_mask;
/* Emulate implicit grab, when the window has both PRESS and RELEASE
- * in its mask, like X (and make it owner_events since that's what
- * implicit grabs are like).
+ * in its mask, like X.
*/
event_mask = (GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
if (!_gdk_quartz_pointer_grab_window &&
(GDK_WINDOW_OBJECT (window)->event_mask & event_mask) == event_mask)
{
- pointer_grab_internal (window, TRUE,
+ pointer_grab_internal (window, FALSE,
GDK_WINDOW_OBJECT (window)->event_mask,
NULL, NULL, TRUE);
}